#include <stdio.h>
#define MAX(a, b) ((a)>(b)?(a):(b))
#define OBJ_LIKE (1 - 1)
#define OBJ_LIKE (1   -     1)
#define showlist(...) printf(#__VA_ARGS__)
#define report(test, ...) ((test)?printf(#test):printf(__VA_ARGS__))
int a[] = { 11, 2};
static int c = 0;
int max(int n)
{
	printf("%d, %d\n", n, ++c);
	return n == 0 ? a[0] : MAX(a[n], max(n-1));
}
#if 0
int main(void)
{
	int x = 0, y = 1;
	report(x>y, "x is %d but y is %d\n", x, y);
	x = 1; y = 0;
	report(x>y, "x is %d but y is %d\n", x, y);
	printf("\n");
	showlist(The first, second, and third items.);
	printf("\n");

	printf("max number %d\n", max(1));
	return 0;
}
#endif
#define  TO_STRING_MACRO(x)     #x
#define  A_TESTING_MACRO(n)     printf("a testing macro with a int argument n=%d !\n", n)
#define  SHOW_MACRO_CONTENT(m)  TO_STRING_MACRO(m)
 
 
 
int main(int argc ,char* argv[] )
{
       int a = 10;
       int *b = &a;
       printf("%s\n", TO_STRING_MACRO(a));
       printf("%s\n", TO_STRING_MACRO(10 + 20));;
       A_TESTING_MACRO(10 + 20);
       printf("%s\n", TO_STRING_MACRO(A_TESTING_MACRO(a)));
       printf("%s\n", SHOW_MACRO_CONTENT(A_TESTING_MACRO(a)));
       printf("%s\n", SHOW_MACRO_CONTENT(A_TESTING_MACRO(*b)));
 
       *b = 100;
       A_TESTING_MACRO(*b);
      
       return 0;
}
